package com.fau.wmbj.server.flowable.service;


import com.fau.wmbj.server.entity.User;
import com.fau.wmbj.server.flowable.domain.bo.*;
import com.fau.wmbj.server.flowable.entity.ActRuTask;
import com.fau.wmbj.server.flowable.domain.vo.VariableVo;
import com.fau.wmbj.server.service.base.BaseService;
import com.fau.wmbj.server.utils.Page;
import com.fau.wmbj.server.utils.Pageable;

import java.util.List;
import java.util.Map;

/**
 * 任务 服务层
 */
public interface ActTaskService extends BaseService<ActRuTask,Long> {
    /**
     * 启动任务
     *
     * @param startProcessBo 启动流程参数
     * @return 结果
     */
    Map<String, Object> startWorkFlow(StartProcessBo startProcessBo);


    /**
     * 办理任务
     *
     * @param completeTaskBo 办理任务参数
     * @return 结果
     */
    boolean completeTask(CompleteTaskBo completeTaskBo);

    /**
     * 查询当前用户的待办任务
     * @param pageable 分页
     * @return 结果
     */
    Page<ActRuTask> getPageByTaskWait(Pageable pageable, User current);

    /**
     * 查询当前租户所有待办任务
     *
     * @param taskBo   参数
     * @param pageable 分页
     * @return 结果
     */
    Page<ActRuTask> getPageByAllTaskWait(TaskBo taskBo, Pageable pageable);


    /**
     * 查询当前用户的已办任务
     *
     * @param taskBo   参数
     * @param pageable 参数
     * @return 结果
     */
    Page<ActRuTask> getPageByTaskFinish(TaskBo taskBo, Pageable pageable);

    /**
     * 查询当前用户的抄送
     *
     * @param taskBo   参数
     * @param pageable 参数
     * @return 结果
     */
    Page<ActRuTask> getPageByTaskCopy(TaskBo taskBo, Pageable pageable);

    /**
     * 查询当前租户所有已办任务
     *
     * @param taskBo   参数
     * @param pageable 参数
     * @return 结果
     */
    Page<ActRuTask> getPageByAllTaskFinish(TaskBo taskBo, Pageable pageable);

    /**
     * 委派任务
     *
     * @param delegateBo 参数
     * @return 结果
     */
    boolean delegateTask(DelegateBo delegateBo);

    /**
     * 终止任务
     *
     * @param terminationBo 参数
     * @return 结果
     */
    boolean terminationTask(TerminationBo terminationBo);

    /**
     * 转办任务
     *
     * @param transmitBo 参数
     * @return 结果
     */
    boolean transferTask(TransmitBo transmitBo);

    /**
     * 会签任务加签
     *
     * @param addMultiBo 参数
     * @return 结果
     */
    boolean addMultiInstanceExecution(AddMultiBo addMultiBo);

    /**
     * 会签任务减签
     *
     * @param deleteMultiBo 参数
     * @return 结果
     */
    boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo);

    /**
     * 驳回审批
     *
     * @param backProcessBo 参数
     * @return 流程实例id
     */
    String backProcess(BackProcessBo backProcessBo);

    /**
     * 修改任务办理人
     *
     * @param taskIds 任务id
     * @param userId  办理人id
     * @return 结果
     */
    boolean updateAssignee(String[] taskIds, String userId);

    /**
     * 查询流程变量
     *
     * @param taskId 任务id
     * @return 结果
     */
    List<VariableVo> getInstanceVariable(String taskId);

    /**
     * 查询工作流任务用户选择加签人员
     *
     * @param taskId 任务id
     * @return 结果
     */
    String getTaskUserIdsByAddMultiInstance(String taskId);

    /**
     * 查询工作流选择减签人员
     *
     * @param taskId 任务id
     * @return 结果
     */
    List<ActRuTask> getListByDeleteMultiInstance(String taskId);
}
